package com.feng.collection;

import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.ListIterator;
import java.util.concurrent.CopyOnWriteArrayList;

/**
 * 需求：下列代码移除容器中的偶数，是否正确，如何修改？
 * @author Qian
 *
 */
public class FactDemo {

	public static void main(String[] args) {
		List<Integer> list = new LinkedList<Integer>();
		for (int i = 1; i <= 10; i++) {
			list.add(i);
		}
		//1、迭代时，调用集合对象的remove方法时修改了集合结构，是的记录集合修改次数的modCount++了，会抛出java.util.ConcurrentModificationException
		for (int i : list) {//（第二次）调用迭代器中的next方法是抛出异常
			if (i % 2 == 0) {
				//调用的是集合对象中的remove方法
				//list.remove(i);//2、int i 为基本数据类型，remove(i)表示按角标删除，会抛出角标越界异常
				//System.err.println(list);
			}
		}
		
		System.err.println("-----------修改一-------------------");
		//使用迭代器iterator方法中的remove方法或使用ListIterator中的add、remove、set方法
		//for (Iterator<Integer> ll=list.iterator();iterator.hasNext();) {
		for (ListIterator<Integer> ll=list.listIterator();ll.hasNext();) {
			int i = ll.next();
			if (i%2==0) {
				ll.set(111);
				System.out.println(list);
				System.out.println(i);
				ll.remove();//直接删除该元素
				ll.add(100);
			}
		}
		System.out.println(list);
		
		System.err.println("-----------修改二-------------------");
		
		//使用java.util.concurrent包下的方法
		List<Integer> list2 = new CopyOnWriteArrayList<Integer>();
		for (int i = 1; i <= 10; i++) {
			list2.add(i);
		}
		System.err.println("集合====="+list2);
		for (Integer o : list2) {
			if (o%2==0) {
				list2.remove(o);//o代表一个对象
			}
			System.err.println(list2);
		}
	}
}
